
// Definition for a binary tree node.
struct TreeNode
{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};

class Solution
{
public:
    TreeNode *increasingBST(TreeNode *root)
    {
        // root 为空 展开的结果为空
        if (!root)
            return nullptr;
        // 对于任何一颗树 根的右边为展开后的右边
        root->right = increasingBST(root->right);
        // 如果根的左边没有节点代表为最小 返回答案
        if (!root->left)
            return root;
        // 找到左边的最大
        TreeNode *l_max = root->left;
        while (l_max && l_max->right)
        {
            l_max = l_max->right;
        }
        // 拼接 更新根节点
        l_max->right = root;
        TreeNode *new_root = root->left;
        root->left = nullptr;
        // 展开新的根节点
        return increasingBST(new_root);
    }
};